import { createAlova } from 'alova';
import adapterFetch from 'alova/fetch';
import { ElMessage } from "element-plus";

const alovaInstance = createAlova({
    baseURL: 'http://localhost:9090',
    requestAdapter: adapterFetch({
        timeout: 30000
    }),
    beforeRequest(method) {
        method.config.headers = {
            ...method.config.headers,
            'Content-Type': 'application/json;charset=utf-8'
        };
    },
    responded: {
        onSuccess: async (response, method) => {
            // 检查HTTP状态码
            if (response.status >= 400) {
                const error = new Error(response.statusText || `HTTP错误！错误状态码：${response.status}`);
                error.status = response.status;
                throw error;
            }
            // 解析响应数据
            let res;
            try {
                res = await response.json();
            } catch (e) {
                // 如果解析JSON失败，尝试作为文本处理
                const text = await response.text();
                throw new Error(`响应解析失败: ${text}`);
            }

            // 兼容服务端返回的字符串数据
            if (typeof res === 'string') {
                try {
                    res = res ? JSON.parse(res) : res;
                } catch (e) {
                    // 如果解析失败，保持原样
                }
            }

            // 检查业务状态码 - 注意比较字符串
            if (res.code !== '200') {
                // 创建包含完整响应数据的错误对象
                const error = new Error(res.msg || '业务处理失败');
                error.response = res;
                throw error;
            }
            // 返回完整的响应对象
            return res;
        },
        onError: (err, method) => {
            // 优先使用业务错误消息
            let errorMessage = err.response?.msg || err.message;

            // 特定错误处理
            if (err.name === 'AbortError') {
                errorMessage = '请求被取消';
            } else if (err.name === 'TypeError' && err.message.includes('timeout')) {
                errorMessage = '请求超时，请稍后再试';
            } else if (err.name === 'TypeError') {
                errorMessage = '网络连接失败，请检查网络设置';
            } else if (err.status === 401) {
                errorMessage = '未授权，请重新登录';
            } else if (err.status === 403) {
                errorMessage = '权限不足，禁止访问';
            } else if (err.status === 404) {
                errorMessage = '未找到请求接口';
            } else if (err.status === 500) {
                errorMessage = err.response?.msg || '系统异常，请查看后端控制台报错';
            }

            // 显示错误消息
            ElMessage.error(errorMessage);

            // 继续抛出错误，以便在调用处的catch中可以处理
            throw err;
        }
    }
});

export default alovaInstance;